Attribute VB_Name = "CreaFiglio"
Option Explicit
Public Function CreateDB(ByVal NomeDB As String, ByRef conn As ADODB.Connection) As Boolean
    CreateDB = False
    
    'crea le tabella
    If Not QueryComando(SPCreateEx, conn) Then GoTo Esci
    If Not QueryComando(SPAlterEx, conn) Then GoTo Esci
    
    'popola le tabelle chiave esterna
    If Not Crea1N(conn, ViewDifettoPresente, SPsceglidifetto, SPInsertDifettoEx) Then GoTo Esci
    
    If Not Crea1N(conn, ViewTipoPresente, SPScegliTipo, SPInsertCategorieEx) Then GoTo Esci
    
    If Not Crea1N(conn, ViewProvinciaPresente, SPScegliProvincia, SPInsertGeogEx) Then GoTo Esci
    
    'riempi tblcartolina
    If Not CreaNN(conn, ViewSelezionate, SPCartolinaEx) Then GoTo Esci
    'riempi tblcartolinadifetto
    If Not CreaNN(conn, ViewDifettoSelezionate, SPInsertCartolinaDifettoEx) Then GoTo Esci
    'riempi tbltematica
    If Not CreaNN(conn, ViewTematicheSelezionate, SPInsertTematicheEx) Then GoTo Esci
    
    'crea db
    'If Not QueryComando("SPCreateDB", conn, , Array(NomeDB)) Then GoTo Esci
    
    'sposta le tabelle piene di dati nel nuovo db
    
    'elimina le tabelle *Ex ?facoltativo?
    
    CreateDB = True
Esci:
    'Set rstID = Nothing
    'Set rstIns = Nothing
End Function
Private Function Crea1N(conn As ADODB.Connection, ByVal IsPresent As String, ByVal SPScegli, ByVal SPIns As String) As Boolean
    Dim rstID As ADODB.Recordset
    Dim rstIns As ADODB.Recordset
    Dim NumCartoline As Long
    Dim Matrice() As Variant
    Dim Contatore As Long
    Dim ID As Long
    Crea1N = False
    Set rstID = New ADODB.Recordset
    rstID.CursorType = adOpenStatic
    'riempie il recordset
    'IDChiaveEsterna - NumeroCartolineAssociate
    If Not QueryComando(IsPresent, conn, rstID) Then GoTo Esci
    'per ogni id guarda il numero
    'se le cartoline associate sono in numero maggiore di 0 inserisci
    Do Until rstID.EOF
        ID = rstID.Fields("ID")
        NumCartoline = rstID.Fields("NumCart")
        If NumCartoline > 0 Then
            Set rstIns = New ADODB.Recordset
            rstIns.CursorType = adOpenStatic
            'prendi i dati relativi all'oggetto
            If Not QueryComando(SPScegli, conn, rstIns, Array(ID)) Then GoTo Esci
            'crea l'array di parametri
            ReDim Matrice(rstIns.Fields.Count - 1)
            For Contatore = 0 To rstIns.Fields.Count - 1 Step 1
                Matrice(Contatore) = rstIns.Fields(Contatore)
            Next
            'inseriscili
            If Not QueryComando(SPIns, conn, , Matrice) Then GoTo Esci
        End If
        rstID.MoveNext
    Loop
    Crea1N = True
Esci:
    Erase Matrice
    Set rstID = Nothing
    Set rstIns = Nothing
End Function

Private Function CreaNN(conn As ADODB.Connection, ByVal ViewScegli, ByVal SPIns As String) As Boolean
    Dim rstIns As ADODB.Recordset
    Dim Matrice() As Variant
    Dim Contatore As Long
    CreaNN = False
    Set rstIns = New ADODB.Recordset
    rstIns.CursorType = adOpenStatic
    'prendi un recordset con tutti gli oggetti selezionati da esportare
    If Not QueryComando(ViewScegli, conn, rstIns) Then GoTo Esci
    'inserisci ogni elemento dell'insieme
    Do Until rstIns.EOF
        'crea la matrice di parametri
        ReDim Matrice(rstIns.Fields.Count - 1)
        For Contatore = 0 To rstIns.Fields.Count - 1 Step 1
            Matrice(Contatore) = rstIns.Fields(Contatore)
        Next
        If Not QueryComando(SPIns, conn, , Matrice) Then GoTo Esci
        rstIns.MoveNext
    Loop
    CreaNN = True
Esci:
    Erase Matrice
    Set rstIns = Nothing
End Function
